package com.yycx.module.bus.provider.mapper.hy;

import com.yycx.common.base.entity.EntityMap;
import com.yycx.common.mybatis.base.mapper.SuperMapper;
import com.yycx.module.bus.client.entity.hy.HyOrder;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 海鹰订单 Mapper 接口
 *
 * @author flyme
 * @date 2021-01-05
 */
@Mapper
public interface HyRemoteOrderMapper extends SuperMapper<HyOrder> {

    /**
     * 入订单表分页列表
     *
     * @param params
     * @return
     */
    List<EntityMap> hyOrderList(Map params);

    /**
     * 查询订单详情
     *
     * @param params
     * @return
     */
    EntityMap getHyOrderById(Map params);

    /**
     * 入订单明细
     *
     * @param orderNo
     * @return
     */
    List<EntityMap> queryHyOrderDetailList(String orderNo);


    /**
     * 查询客户商品历史销售信息
     *
     * @param dbName
     * @param drugNo
     * @param customCode
     * @return
     */
    List<EntityMap> getHistoryDrug(@Param("dbName") String dbName, @Param("drugNo") String drugNo, @Param("customCode") String customCode);

    /**
     * 统计入分页条数
     *
     * @param params
     * @return
     */
    int countHyOrder(Map params);

    /**
     * 统计出订单分页条数
     *
     * @param params
     * @param dbName
     * @return
     */
    int countHyOutOrder(@Param("dbName") String dbName, @Param("t") Map params);


    /**
     * 海鹰出订单表
     *
     * @param dbName
     * @param params
     * @return
     */
    List<EntityMap> outOrderPageList(@Param("dbName") String dbName, @Param("t") Map params);

    /**
     * 查询海鹰出订单详情
     *
     * @param dbName
     * @param params
     * @return
     */
    EntityMap getOutOrderById(@Param("dbName") String dbName, @Param("t") Map params);

    /**
     * 查询出订单主全部数据
     *
     * @param dbName
     * @param params
     * @return
     */
    EntityMap getOutOrderAllFieldById(@Param("dbName") String dbName, @Param("t") Map params);


    /**
     * 根据单据编码查订单详情
     *
     * @param dbName
     * @param orderNo
     * @return
     */
    List<EntityMap> queryOutHyOrderDetailList(@Param("dbName") String dbName, @Param("orderNo") String orderNo);

    /**
     * 根据购货方编码查询
     *
     * @param customCode
     * @return
     */
    EntityMap getCustomByCode(String customCode);


    /**
     * description: 查询销售订单
     * date: 2023年-01月-31日 09:35
     * author: ldd
     *
     * @param currentDay
     * @return java.util.List<com.yycx.common.base.entity.EntityMap>
     */
    List<EntityMap> saleOrderList(@Param("dbName") String dbName, @Param("currentDay") String currentDay, @Param("orderNos") List<String> orderNos, @Param("orderNo") String orderNo);

    List<EntityMap> saleOrderLists(@Param("dbName") String dbName, @Param("startDay") String startDay, @Param("endDay") String endDay, @Param("orderNos") List<String> orderNos);

    List<EntityMap> saleOrderList1(@Param("dbName") String dbName, @Param("currentDay") String currentDay, @Param("orderNo") String orderNo);

    List<EntityMap> saleOrderDetail(@Param("dbName") String dbName, @Param("month") String month, @Param("productCodes") List<String> productCodes);


    /**
     * 计算成本 当天销售明细记录
     */
    List<EntityMap> saleOrderDetailList(@Param("dbName") String dbName, @Param("currentDay") String currentDay, @Param("orderNos") List<String> orderNos, @Param("orderNo") String orderNo);

    /**
     * description: 查询采购订单
     * date: 2023年-01月-31日 10:07
     * author: ldd
     *
     * @param currentDay
     * @return java.util.List<com.yycx.common.base.entity.EntityMap>
     */
    List<EntityMap> buyOrderList(@Param("dbName") String dbName, @Param("currentDay") String currentDay, @Param("orderNos") List<String> orderNos, @Param("orderNo") String orderNo);

    List<EntityMap> buyOrderLists(@Param("dbName") String dbName, @Param("startDay") String startDay, @Param("endDay") String endDay, @Param("orderNos") List<String> orderNos);

    /**
     * 当天采购明细记录
     */
    List<EntityMap> buyOrderDetailList(@Param("dbName") String dbName, @Param("currentDay") String currentDay, @Param("orderNos") List<String> orderNos, @Param("orderNo") String orderNo);


    /**
     * 查询指定商品
     */
    EntityMap getProductByCode(String productCode);

    /**
     * 查询指定类型商品
     */
    List<EntityMap> getProductByType(@Param("dbName") String dbName, @Param("productType") String productType);

    /**
     * 样品 指定月份销售记录
     */
    List<EntityMap> sampleOrderDetailList(@Param("dbName") String dbName, @Param("month") String month);

    /**
     * 样品 指定月份销售明细记录
     */
    List<EntityMap> sampleOrderList(@Param("dbName") String dbName, @Param("month") String month);

    /**
     * 计算成本 当天销售记录
     */
    List<EntityMap> saleCostList(@Param("dbName") String dbName, @Param("month") String month, @Param("orderNos") List<String> orderNos, @Param("orderNo") String orderNo);

    List<EntityMap> saleCostLists(@Param("dbName") String dbName, @Param("startDay") String startDay, @Param("endDay") String endDay, @Param("orderNos") List<String> orderNos);

    /**
     * 计算成本 当天销售明细记录
     */
    List<EntityMap> saleCostDetailList(@Param("dbName") String dbName, @Param("month") String month, @Param("orderNos") List<String> orderNos, @Param("orderNo") String orderNo);


    /**
     * 根据商品批次查询采购信息
     */
    List<EntityMap> getBuyProductByBatch(@Param("dbName") String dbName, @Param("productCode") String productCode, @Param("productBatch") String productBatch);


    /**
     * 根据商品批次查询销售信息
     */
    List<EntityMap> getSaleProductByBatch(@Param("dbName") String dbName, @Param("productCode") String productCode, @Param("productBatch") String productBatch, @Param("orderDate") String orderDate);


    /**
     * description: 查询当天付款记录
     * date: 2023年-02月-23日 13:58
     * author: ldd
     *
     * @param dbName
     * @param currentDay
     * @param orderNos
     * @return java.util.List<com.yycx.common.base.entity.EntityMap>
     */
    List<EntityMap> receiptPaymentOrderList(@Param("fx") String fx, @Param("dbName") String dbName, @Param("currentDay") String currentDay, @Param("orderNos") List<String> orderNos);

    List<EntityMap> receiptPaymentOrderLists(@Param("fx") String fx, @Param("dbName") String dbName, @Param("startDay") String startDay, @Param("endDay") String endDay, @Param("orderNos") List<String> orderNos);

    /**
     * description: 查询指定订单的采购记录
     * date: 2023年-02月-23日 13:57
     * author: ldd
     *
     * @param dbName
     * @param orderNos
     * @return java.util.List<com.yycx.common.base.entity.EntityMap>
     */
    List<EntityMap> purchasePaymentOrderList(@Param("dbName") String dbName, @Param("orderNos") List<String> orderNos);

    /**
     * description: 查询指定订单的采购明细记录
     * date: 2023年-02月-23日 13:57
     * author: ldd
     *
     * @param dbName
     * @param orderNos
     * @return java.util.List<com.yycx.common.base.entity.EntityMap>
     */
    List<EntityMap> purchasePaymentOrderDetailList(@Param("dbName") String dbName, @Param("orderNos") List<String> orderNos);

    /**
     * description: 付款闽西
     * date: 2023年-02月-27日 14:54
     * author: ldd
     *
     * @param erpName
     * @param mxNo
     * @return java.util.List<com.yycx.common.base.entity.EntityMap>
     */
    List<EntityMap> purchasePaymentDetailList(@Param("dbName") String erpName, @Param("mxNo") String mxNo);

    /**
     * description: 收款单据
     * date: 2023年-03月-01日 19:50
     * author: ldd
     *
     * @param dbName
     * @param currentDay
     * @param orderNos
     * @return java.util.List<com.yycx.common.base.entity.EntityMap>
     */
    List<EntityMap> purchasePayableOrderList(@Param("dbName") String dbName, @Param("currentDay") String currentDay, @Param("orderNos") List<String> orderNos);

    /**
     * description: 收款明细
     * date: 2023年-03月-01日 19:50
     * author: ldd
     *
     * @param dbName
     * @param currentDay
     * @param orderNos
     * @return java.util.List<com.yycx.common.base.entity.EntityMap>
     */
    List<EntityMap> purchasePayableOrderDetailList(@Param("dbName") String dbName, @Param("currentDay") String currentDay, @Param("orderNos") List<String> orderNos);

    /**
     * 查询海鹰ERP商品列表
     *
     * @param dbName
     * @return
     */
    List<EntityMap> selectHyDrugList(@Param("dbName") String dbName);

    /**
     * 查询海鹰商品列表
     *
     * @param dbName
     * @param title
     * @param drugCodes
     * @return
     */
    List<EntityMap> selectTop10HyDrugList(@Param("dbName") String dbName, @Param("title") String title, @Param("drugCodes") List<String> drugCodes);

    List<EntityMap> selectTop10HyDrugListNew(@Param("dbName") String dbName, @Param("title") String title, @Param("drugCodes") List<String> drugCodes);

    /**
     * 查询仓库编码
     *
     * @param dbName
     * @param storeNameList
     * @return
     */
    List<EntityMap> selectStoreCode(@Param("dbName") String dbName, @Param("storeNameList") List<String> storeNameList);

    /**
     * 查询商品编码
     *
     * @param dbName
     * @param storeCodeList
     * @return
     */
    List<EntityMap> selectDrugCodes(@Param("dbName") String dbName, @Param("storeCodeList") List<String> storeCodeList);

    /**
     * 查询客商资料
     *
     * @param dbName
     * @param title
     * @return
     */
    List<EntityMap> selectTop20HyCustomList(@Param("dbName") String dbName, @Param("title") String title);

    /**
     * 查询海鹰部门
     *
     * @param dbName
     * @return
     */
    List<EntityMap> selectHyDeptList(@Param("dbName") String dbName);

    /**
     * 查询海鹰业务员
     *
     * @param dbName
     * @return
     */
    List<EntityMap> selectHySaleManList(@Param("dbName") String dbName);

    /**
     * 查询海鹰客户
     *
     * @param dbName
     * @return
     */
    List<EntityMap> selectHasUpdateHyCustomList(@Param("dbName") String dbName, @Param("t") EntityMap entity);

    /**
     * 查询单个客户
     *
     * @param dbName
     * @param customCode
     * @return
     */
    EntityMap selectHyCustom(@Param("dbName") String dbName, @Param("customCode") String customCode);

    /**
     * 查询客户收货地址
     *
     * @return
     */
    List<EntityMap> selectHyCustomAddress(@Param("dbName") String dbName, @Param("customCode") String customCode);


    /**
     * 查询海鹰ERP商品列表
     *
     * @param dbName
     * @param drugNo
     * @return
     */
    List<EntityMap> selectLotNoByDrugNo(@Param("dbName") String dbName, @Param("drugNo") String drugNo,@Param("codes") List<String> codes);

    /**
     * description: 查看当天销售总数
     * date: 2023年-08月-15日 18:53
     * author: ldd
     *
     * @return java.lang.Long
     */
    Long saleOrderCount(@Param("dbName") String dbName, @Param("currentDay") String currentDay);

    /**
     * description: 查看当天采购总数
     * date: 2023年-08月-15日 19:28
     * author: ldd
     *
     * @param dbName
     * @param currentDay
     * @return long
     */
    long buyOrderCount(@Param("dbName") String dbName, @Param("currentDay") String currentDay);


    long saleCostCount(@Param("dbName") String dbName, @Param("currentDay") String currentDay);


    /**
     * 查询商品现存数量
     *
     * @param dbName
     * @param drugNo
     * @return
     */
    EntityMap selectHyDrugSurplusNum(@Param("dbName") String dbName, @Param("drugNo") String drugNo);

    /**
     * 查询商品库存
     *
     * @param dbName
     * @param drugNo
     * @return
     */
    Integer selectLockCount(@Param("dbName") String dbName, @Param("drugNo") String drugNo, @Param("drugLotNo") String drugLotNo, @Param("storeCode") String storeCode);

    /**
     * 查询商品库存
     *
     * @param dbName
     * @param drugLotId
     * @return
     */
    EntityMap selectByDrugLotId(@Param("dbName") String dbName, @Param("drugLotId") Integer drugLotId);


    /**
     * 查询商品库存
     *
     * @param dbName
     * @param hostName
     * @return
     */
    EntityMap selectSysProperties(@Param("dbName") String dbName, @Param("hostName") String hostName);


    /**
     * 更新出订单号
     *
     * @param dbName
     * @param entity
     */
    void updateOrderDetailsSysProperties(@Param("dbName") String dbName, @Param("t") EntityMap entity);


    /**
     * 根据商品库存编码查询某批号商品库存信息
     *
     * @param dbName
     * @param drugNo
     * @param drugLotNo
     * @param storeCode
     * @return
     */
    List<EntityMap> selectDrugLotList(@Param("dbName") String dbName, @Param("drugNo") String drugNo, @Param("drugLotNo") String drugLotNo, @Param("storeCode") String storeCode);


    /**
     * 统计出订单数量
     * @param dbName
     * @param drugNo
     * @param drugLotNo
     * @param storeCode
     * @return
     */
    Integer countCdCount(@Param("dbName") String dbName, @Param("drugNo") String drugNo, @Param("drugLotNo") String drugLotNo, @Param("storeCode") String storeCode);


    /**
     * 统计某个批号某个成本价销售数量
     * @param dbName
     * @param drugNo
     * @param drugLotNo
     * @param storeCode
     * @param costPrice
     * @return
     */
    BigDecimal countCddx(@Param("dbName") String dbName, @Param("drugNo") String drugNo, @Param("drugLotNo") String drugLotNo, @Param("storeCode") String storeCode, @Param("costPrice") BigDecimal costPrice);



    /**
     * 统计某批号某单价其他出库数量
     * @param dbName
     * @param drugNo
     * @param drugLotNo
     * @param storeCode
     * @param costPrice
     * @return
     */
    BigDecimal countOtherCount(@Param("dbName") String dbName, @Param("drugNo") String drugNo, @Param("drugLotNo") String drugLotNo, @Param("storeCode") String storeCode, @Param("costPrice") BigDecimal costPrice);



    BigDecimal selectCostPrice(@Param("dbName") String dbName, @Param("orderDetailsId") String orderDetailsId);


    /**
     * 统计出库数量
     * @param dbName
     * @param drugNo
     * @param drugLotNo
     * @param storeCode
     * @return
     */
    Integer countCkCount(@Param("dbName") String dbName, @Param("drugNo") String drugNo, @Param("drugLotNo") String drugLotNo, @Param("storeCode") String storeCode);

    /**
     * 统计某个商品退货数量
     * @param dbName
     * @param orderNo 入库单编号
     * @param drugNo
     * @param drugLotNo
     * @param storeCode
     * @return
     */
    BigDecimal countThCount(@Param("dbName") String dbName, @Param("orderNo") String orderNo, @Param("drugNo") String drugNo, @Param("drugLotNo") String drugLotNo, @Param("storeCode") String storeCode);

    /**
     * 统计某个商品退货数量
     * @param dbName
     * @param orderNo 入库单编号
     * @param drugNo
     * @param drugLotNo
     * @param storeCode
     * @return
     */
    BigDecimal countThCount1(@Param("dbName") String dbName, @Param("orderNo") String orderNo, @Param("drugNo") String drugNo, @Param("drugLotNo") String drugLotNo, @Param("storeCode") String storeCode);

    /**
     * 库存明细
     *
     * @param params
     * @return
     */
    List<EntityMap> stockReport(Map params);

    int countStockReport(Map cq);


    /**
     * 插入海鹰订单
     *
     * @param dbName
     * @param entity
     */
    void insertHyOrder(@Param("dbName") String dbName, @Param("t") EntityMap entity);

    /**
     * 插入退货单
     * @param dbName
     * @param entity
     */
    void insertHyBackOrder(@Param("dbName") String dbName, @Param("t") EntityMap entity);

    /**
     * 插入订单明细
     *
     * @param dbName
     * @param entity
     */
    void insertHyOrderDetails(@Param("dbName") String dbName, @Param("t") EntityMap entity);

    /**
     * 更新在单数
     *
     * @param dbName
     * @param entity
     */
    void updateByDrugLotId(@Param("dbName") String dbName, @Param("t") EntityMap entity);


    /**
     * 重新计算商品库存在单数
     * @param dbName
     * @param entity
     */
    void updateOnUserCount(@Param("dbName") String dbName, @Param("t") EntityMap entity);

    /**
     * 重新计算商品目录在单数
     * @param dbName
     * @param entity
     */
    void updateDrugOnUserCount(@Param("dbName") String dbName, @Param("t") EntityMap entity);

    /**
     * 更新最近销售日期
     *
     * @param dbName
     * @param entity
     */
    void updateLastSaleDate(@Param("dbName") String dbName, @Param("t") EntityMap entity);

    /**
     * 更新商品编码
     *
     * @param dbName
     * @param entity
     */
    void updateDrugId(@Param("dbName") String dbName, @Param("t") EntityMap entity);

    /**
     * 更新销售审批信息
     *
     * @param dbName
     * @param entity
     */
    void updateXsComments(@Param("dbName") String dbName, @Param("t") EntityMap entity);


    /**
     * 更新质量审批信息
     *
     * @param dbName
     * @param entity
     */
    void updateZlComments(@Param("dbName") String dbName, @Param("t") EntityMap entity);

    /**
     * 更新财务审批信息
     *
     * @param dbName
     * @param entity
     */
    void updateCwComments(@Param("dbName") String dbName, @Param("t") EntityMap entity);

    /**
     * 更新同步状态
     *
     * @param dbName
     * @param entity
     */
    void updateSyncState(@Param("dbName") String dbName, @Param("t") EntityMap entity);


    /**
     * 更新结算审批信息
     *
     * @param dbName
     * @param entity
     */
    void updateJsComments(@Param("dbName") String dbName, @Param("t") EntityMap entity);

    /**
     * 更新自定义成本价
     *
     * @param dbName
     */
    void updateCostPrice(@Param("dbName") String dbName);


    /**
     * 删除主订单表
     *
     * @param dbName
     * @param orderId
     */
    void deleteOrderByOrderId(@Param("dbName") String dbName, @Param("orderId") String orderId);

    /**
     * 删除主订单表
     *
     * @param dbName
     * @param orderId
     */
    void deleteOrderDetailsByOrderId(@Param("dbName") String dbName, @Param("orderId") String orderId);


    /**
     * 查询是否有出订单主
     *
     * @param dbName
     * @param orderId
     */
    Integer countByOrderId(@Param("dbName") String dbName, @Param("orderId") String orderId);

    /**
     * 查询出订单主单据编号
     *
     * @param dbName
     * @param orderId
     * @return
     */
    Map getOutOrderNo(@Param("dbName") String dbName, @Param("orderId") String orderId);

    /**
     * 查询销售退回收货单
     *
     * @param dbName
     * @param orderId
     * @return
     */
    String getChhOutOrderNo(@Param("dbName") String dbName, @Param("orderId") String orderId);


    /**
     * 查询部门
     *
     * @param dbName
     * @param deptNo
     * @return
     */
    EntityMap selectHyDeptByDeptNo(@Param("dbName") String dbName, @Param("deptNo") String deptNo);


    /**
     * 添加业务员
     *
     * @param dbName
     * @param entity
     */
    void insertHySaleMan(@Param("dbName") String dbName, @Param("t") EntityMap entity);

    /**
     * 更新业务员
     *
     * @param dbName
     * @param entity
     */
    void updateHySaleMan(@Param("dbName") String dbName, @Param("t") EntityMap entity);

    /**
     * 统计业务员是否有订单
     *
     * @param dbName
     * @param saleManNo
     */
    Integer countBySaleManNo(@Param("dbName") String dbName, @Param("saleManNo") String saleManNo);

    /**
     * 删除业务员
     *
     * @param dbName
     * @param saleManNo
     * @return
     */
    Integer deleteSaleManByNo(@Param("dbName") String dbName, @Param("saleManNo") String saleManNo);

    /**
     * 采购列表
     */
    List<EntityMap> cgList(Map params);

    /**
     * 采购总数
     */
    int cgCount(Map params);

    /**
     * 销售列表
     */
    List<EntityMap> xsList(Map params);

    /**
     * 销售总数
     */
    int xsCount(Map params);

    /**
     * 订单详情
     */
    EntityMap getHyOrderVoucherByOrderNo(Map map);

    /**
     * 更新销售凭证信息
     */
    void updateXsVocher(@Param("dbName")String dbName, @Param("voucherHandleState") int voucherHandleState,  @Param("voucher") String voucher, @Param("orderNos") List<String> orderNos);

    /**
     * 更新采购凭证信息
     */
    void updateCgVocher(@Param("dbName")String dbName,@Param("voucherHandleState") int voucherHandleState, @Param("voucher") String voucher,@Param("orderNos") List<String> orderNos);

    /**
     * 更新样品凭证信息
     */
    void updateYpVocher(@Param("dbName")String dbName,@Param("voucherHandleState") int voucherHandleState,@Param("voucher")  String voucher,@Param("orderNos") List<String> orderNos);

    /**
     * 成本列表
     */
    List<EntityMap> cbList(Map params);

    /**
     * 成本总数
     */
    int cbCount(Map params);

    /**
     * 更新成本凭证信息
     */
    void updateCbVocher(@Param("dbName")String dbName,@Param("voucherHandleState") int voucherHandleState,@Param("voucher") String voucher,@Param("orderNos") List<String> orderNos);

    /**
     * 成本列表
     */
    List<EntityMap> ypList(Map params);

    /**
     * 成本总数
     */
    int ypCount(Map params);

    /**
     * description: 按月查询销售
     * date: 2023年-12月-08日 14:26
     * author: ldd
     *
     * @param dbName
     * @param month
     * @return java.util.List<com.yycx.common.base.entity.EntityMap>
     */
    List<EntityMap> xsMonthList(Map params);

}
